A major objective in graphics rendering is to produce images that are so realistic that the observer believes the image is real. A fundamental difficulty in achieving total visual realism is the complexity of accurately representing real-world visual effects. A scene can include a wide variety of textures, subtle color gradations, reflections, translucency, etc.
Transparency is particularly difficult to implement in a graphics pipeline due to many stringent requirements. In particular, per-fragment depth sorting is necessary for producing correct transparency rendering. While per-primitive sorting may be handled by a central processing unit (CPU), it is impossible to implement per-fragment sorting in most dedicated graphics pipelines. Moreover, any intersections among the objects/primitives frustrate the transparency calculations, since sorting order is not possible to establish at the primitive level. Since object intersection is often prevalent, transparency can simply not be handled by most dedicated graphics hardware.
The foregoing requirements are frustrating for most graphics application developers, because the natural order of scene traversal in a graphics pipeline (i.e. usually one object at a time) rarely satisfies these requirements. Objects can be complex, with their own transformation hierarchies. Even more troublesome, with advanced dedicated graphics hardware, the vertices and fragments of objects may be altered by user-defined per-vertex or per-fragment operations. When these features are employed, it becomes intractable to guarantee that fragments will arrive in sorted order for each pixel.
There is thus a need for handling transparency in a dedicated graphics pipeline without being frustrated by the requirements of the prior art.